


#include <iostream>
using namespace std;


//#include <vector>
//class Sln
//{
//public:
//	void moveZeros(vector<int>& nums)
//	{
//		int dst = 0, cur = 0;
//
//		while (cur < nums.size())
//		{
//			if (nums[cur])
//				swap(nums[dst++], nums[cur]);
//
//			++cur;
//		}
//	}
//
//	void moveZeros2(vector<int>& nums)
//	{
//		int dst = 0, cur = 0;
//
//		for (int cur = 0; cur < nums.size(); ++cur)
//		{
//			if (nums[cur])
//				swap(nums[dst++], nums[cur]);
//		}
//	}
//
//	void moveZeros3(vector<int>& nums)
//	{
//		int dst = -1;
//
//		for (int cur = 0; cur < nums.size(); ++cur)
//		{
//			if (nums[cur])
//				swap(nums[++dst], nums[cur]);
//		}
//	}
//};
//
//int main()
//{
//	vector<int> nums = { 0, 1, 0, 3, 12 };
//	for (auto e : nums)
//	{
//		cout << e << " ";
//	}
//	cout << endl;
//
//	Sln().moveZeros3(nums);
//
//	for (auto e : nums)
//	{
//		cout << e << " ";
//	}
//	cout << endl;
//
//
//	return 0;
//}


// err
#include <vector>
class Sln 
{
public:
	void duplicateZeros(vector<int>& arr)
	{
		int cur = 0, dst = 0;

		while (cur < arr.size())
		{
			if (arr[cur++])
				++dst;
			else
				dst += 2;

			if (dst >= arr.size())
				break;
		}

		--cur;
		dst = arr.size() - 1;
		while (cur >= 0)
		{
			if (dst < 0)
				break;

			if (arr[cur])
				arr[dst--] = arr[cur];
			else
			{
				arr[dst--] = arr[cur];
				if (dst < 0)
					break;
				arr[dst--] = arr[cur];
			}

			--cur;
		}


	}
};
int main()
{
	vector<int> num = {8, 4, 5, 0, 0, 0, 0, 7};
	for (auto e : num)
	{
		cout << e << " ";
	}
	cout << endl;

	Sln().duplicateZeros(num);

	for (auto e : num)
	{
		cout << e << " ";
	}
	cout << endl;

	return 0;
}